package com.cs.beneficios.web.action;
import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.VflexDAO;
import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.VflexVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.util.AccessControl;

import java.io.IOException;

import java.sql.SQLException;
//import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class VerificarGR_BENEAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    AccessControl access = new AccessControl();
    access.validateAccess(mapping,request,response);
    HttpSession session = request.getSession();
    //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	ConnectionFactory cf = new ConnectionFactory();
    
    Collection cGrupoFamiliarSisben = null;
    Collection cBeneficiario = null;
    Collection cGrupoFamiliar = null;
    Collection cParentescos = null;
    List lListGrupoFamiliarSisben = new LinkedList();
    List lListGrupoFamiliar = new LinkedList();
    List lListBeneficiario = new LinkedList();
    List lListParentesco = new LinkedList();
    
    BeneficiarioDAO objBeneficiarioDAO  = null;
    BeneficiarioVO beneVO = new BeneficiarioVO();
    String strOption = request.getParameter("opcion");
    String strJefeFamiliar = "";
    session.removeAttribute("bene");
    session.removeAttribute("cabezas");
    session.removeAttribute("parentesco");
    session.removeAttribute("Option");
    session.removeAttribute("codeParentesco");
        
    cGrupoFamiliarSisben = (Collection)session.getAttribute("grupo_familiar_Sisben");
    
    if(cGrupoFamiliarSisben != null && cGrupoFamiliarSisben.size() != 0)
    {
      try
      {
        // Proceso para verificar si el beneficiario cabeza de hogar este registrado
        // en el SUB y si tiene un grupo familiar creado.
        for(int i=0; i<cGrupoFamiliarSisben.size(); i++)
        {
          lListGrupoFamiliarSisben = (List)cGrupoFamiliarSisben;
          beneVO = (BeneficiarioVO)lListGrupoFamiliarSisben.get(i);
          beneVO.setCode(null);
          if(beneVO.getParentesco().equals("JEFE"))
          {
            objBeneficiarioDAO = new BeneficiarioDAO(cf);
            lListBeneficiario = (List)objBeneficiarioDAO.findBeneficiarioByCriterea(beneVO,"gf");
            cf.closeConnection(objBeneficiarioDAO.getConn());
            session.setAttribute("Option","2");
            if(lListBeneficiario.size()!= 0 && lListBeneficiario != null)
            {
              BeneficiarioVO objBeneVo = new BeneficiarioVO();
              objBeneVo = (BeneficiarioVO)lListBeneficiario.get(0);
              objBeneficiarioDAO  = new BeneficiarioDAO(cf);
              cGrupoFamiliar = objBeneficiarioDAO.getCabezasGrupoFamiliar(objBeneVo);
              cf.closeConnection(objBeneficiarioDAO.getConn());
              if(cGrupoFamiliar != null && cGrupoFamiliar.size() != 0)
              {
                ///////////////////////
                for(int j=0; i<cGrupoFamiliarSisben.size(); j++)
                {
                  if(j == Integer.parseInt(strOption.trim()))
                  {
                    lListGrupoFamiliarSisben = (List)cGrupoFamiliarSisben;
                    beneVO = (BeneficiarioVO) lListGrupoFamiliarSisben.get(j);
                    beneVO.setCode(null);
                    
                    objBeneficiarioDAO = new BeneficiarioDAO(cf);
                    lListBeneficiario = new LinkedList();
                    lListBeneficiario = (List)objBeneficiarioDAO.findBeneficiarioByCriterea(beneVO,"gf");
                    cf.closeConnection(objBeneficiarioDAO.getConn());
                    
                    // Proceso para traer el codigo del parentesco
                    VflexDAO objValorFlexDAO = new VflexDAO(cf);
                    lListParentesco = (List)objValorFlexDAO.FindCodeValorFlex(beneVO.getParentesco());
                    cf.closeConnection(objValorFlexDAO.getConn());
                    if(lListParentesco != null && lListParentesco.size() != 0)
                    {
                      VflexVO objValorFlexVO = new VflexVO();
                      objValorFlexVO = (VflexVO)lListParentesco.get(0);
                      session.setAttribute("codeParentesco",objValorFlexVO.getCode().toString());
                    }
                    // Fin del proceso
                    
                    if(lListBeneficiario != null && lListBeneficiario.size()!= 0)
                    {
                      lListGrupoFamiliar = (List)cGrupoFamiliar;
                      BeneficiarioVO benefiVO = (BeneficiarioVO)lListGrupoFamiliar.get(0);
                      
                      request.setAttribute("cabeza",benefiVO.getCode().toString());
                      session.setAttribute("cabezas",lListGrupoFamiliar);
                                                                  
                      objBeneficiarioDAO = new BeneficiarioDAO(cf);
                      lListBeneficiario = (List)objBeneficiarioDAO.findBeneficiarioByCriterea(beneVO,"gf");
                      cf.closeConnection(objBeneficiarioDAO.getConn());
                      if(lListBeneficiario != null && lListBeneficiario.size() > 0)
                      {
                        session.setAttribute("bene",lListBeneficiario);
                      }
                      
                      return mapping.findForward("Asignar");
                    }else
                    {
                      request.setAttribute("tipoDocumento",beneVO.getTipoDocumento());
                      request.setAttribute("numeroDocumento",beneVO.getNumeroDocumento().toString());
                      request.setAttribute("nombre1",beneVO.getNombre1());
                      
                      if(beneVO.getNombre2() == null)
                        beneVO.setNombre2("");
                      
                      request.setAttribute("nombre2",beneVO.getNombre2());
                      request.setAttribute("apellido1",beneVO.getPrimerApellido());
                      request.setAttribute("apellido2",beneVO.getSegundoApellido());
                      String ArrFecha[] = ((String)beneVO.getFechaNacimiento()).split("/");
                      String strDay = ArrFecha[0];
                      String strMonth = ArrFecha[1];                       
                      String strYear = ArrFecha[2];
                      request.setAttribute("dia",strDay);
                      request.setAttribute("mes",strMonth);
                      request.setAttribute("ano",strYear);
                      request.setAttribute("sexo",beneVO.getSexo());
                      
                      VflexDAO valorFlexDAO = new VflexDAO(cf); 
                      Collection comunas = valorFlexDAO.getVflex("COMUNA");
                      Collection barrios = valorFlexDAO.getVflex("BARRIO");
                      Collection zonas = valorFlexDAO.getVflex("ZONA");
                      cf.closeConnection(valorFlexDAO.getConn());
                      
                      request.setAttribute("comunas",comunas);
                      request.setAttribute("barrios",barrios);
                      request.setAttribute("zonas",zonas);
                      //session.setAttribute("code",beneVO.getCode());
                      
                      return mapping.findForward("Registrar");
                      // Se debe de registrar como beneficiario al SUB
                    }
                      
                  }
                }
              }else
              {              
                // Proceso para traer el codigo del parentesco
                VflexDAO objValorFlexDAO = new VflexDAO(cf);
                lListParentesco = (List)objValorFlexDAO.FindCodeValorFlex(beneVO.getParentesco());
                
                // Collection para traer toda la lista de parentesco
                cParentescos = objValorFlexDAO.getVflex("PARENTESCO");
                
                cf.closeConnection(objValorFlexDAO.getConn());
                if(lListParentesco != null && lListParentesco.size() != 0)
                {
                  VflexVO objValorFlexVO = new VflexVO();
                  objValorFlexVO = (VflexVO)lListParentesco.get(0);
                  session.setAttribute("codeParentesco",objValorFlexVO.getCode().toString());
                }
                // Fin del proceso
                
                session.setAttribute("parentescos",cParentescos);
                session.setAttribute("bene",lListBeneficiario);
                session.setAttribute("msgErrorNGF","El grupo familiar no esta registrado en el Sistema Unico de Beneficios. Por favor registrarlo...");
                return mapping.findForward("CrearGF");
                
                // Se debe crear el grupo familiar
              }
            }else
            {
              /////////////////////////////////////
              request.setAttribute("tipoDocumento",beneVO.getTipoDocumento());
              request.setAttribute("numeroDocumento",beneVO.getNumeroDocumento().toString());
              request.setAttribute("nombre1",beneVO.getNombre1());
              
              if(beneVO.getNombre2() == null)
                beneVO.setNombre2("");
              
              request.setAttribute("nombre2",beneVO.getNombre2());
              request.setAttribute("apellido1",beneVO.getPrimerApellido());
              request.setAttribute("apellido2",beneVO.getSegundoApellido());
              String ArrFecha[] = ((String)beneVO.getFechaNacimiento()).split("/");
              String strDay = ArrFecha[0];
              String strMonth = ArrFecha[1];                       
              String strYear = ArrFecha[2];
              request.setAttribute("dia",strDay);
              request.setAttribute("mes",strMonth);
              request.setAttribute("ano",strYear);
              request.setAttribute("sexo",beneVO.getSexo());
              
              VflexDAO valorFlexDAO = new VflexDAO(cf); 
              Collection comunas = valorFlexDAO.getVflex("COMUNA");
              Collection barrios = valorFlexDAO.getVflex("BARRIO");
              Collection zonas = valorFlexDAO.getVflex("ZONA");
              cf.closeConnection(valorFlexDAO.getConn());
              
              request.setAttribute("comunas",comunas);
              request.setAttribute("barrios",barrios);
              request.setAttribute("zonas",zonas);
              //session.setAttribute("code",beneVO.getCode());
              request.setAttribute("msgNBene", "La persona cabeza de hogar no se encuentra registrada en el Sistema Unico de Beneficios. Por favor ingesarlo....");
              
              System.out.println(" VerificarGR_BENE 232. La persona cabeza de hogar no se encuentra registrada en el Sistema Unico de Beneficios. Por favor ingesarlo....");
              return mapping.findForward("Registrar");
              // Ingresarlo como beneficiario al SUB
            }
          }
        }

        // Fin del Proceso
        
      }catch(SQLException e)
      {
		System.err.println("/******** TDSUB - cwsub");
		e.printStackTrace();
		System.err.println("TDSUB - cwsub ********/");
      }
    }
    return mapping.findForward("success");
  }
}